package com.emou.service.impl;

import com.emou.bean.Ad;
import com.emou.dao.AdDao;
import com.emou.dto.AdDto;
import com.emou.service.AdService;
import com.emou.util.FileUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by emou on 2021/1/25.
 */
@Service
public class AdServiceImpl implements AdService {
    @Autowired
    private AdDao adDao;

    @Value("${adImage.savePath}")
    private String adImageSavePath;

    @Override
    public List<AdDto> searchByPage(AdDto adDto) {
        List<AdDto> result = new ArrayList<>();
        Ad condition = new Ad();
        //要将AdDto对象中的所有属性值copy到Ad对象中，Spring会提供一些工具类，快速完成。
        //如果不用工具类 condition.setTitle(adDto.getTitle)
        BeanUtils.copyProperties(adDto,condition);
        //调用dao的方法
        List<Ad> adList = adDao.selectByPage(condition);//需要传入一下Ad对象
            //要将List<Ad>转换为List<AdDto>
            for(Ad ad:adList){
            AdDto adDtoTemo = new AdDto();
            BeanUtils.copyProperties(ad,adDtoTemo);
            result.add(adDtoTemo);
        }
        return result;
    }

    @Override
    public boolean add(AdDto adDto) {
        //如何实现文件的上传?
        //思路：1.我们要判断一下上传的文件是否为空，如果不为空，我们就要获取到上传文件的名称(格式：系统的时间_原始的文件名)
        //     2. 我们要构造File对象(上传到服务器端的路径)，如果在服务器端没有文件夹我们就要创建一个文件夹，否则就要将文件上传到服务器
        //        然后我们还需要将文件名保存到数据库中
        Ad ad = new Ad();
        ad.setTitle(adDto.getTitle());
        ad.setLink(adDto.getLink());
        ad.setWeight(adDto.getWeight());

        //判断文件是否为空
        if(adDto.getImgFile()!=null && adDto.getImgFile().getSize()>0){
            //如果文件存在我们就要获取到上传文件的名称(格式：系统的时间_原始的文件名)
            String fileName = System.currentTimeMillis()+"_"+adDto.getImgFile().getOriginalFilename();
            //要构造一下File对象(要上传到服务器端的路径)
            File file = new File(adImageSavePath+fileName);
            File fileForder = new File(adImageSavePath);
            if(!fileForder.exists()){
                //创建一个文件夹
                fileForder.mkdirs();
            }
            try {
                //将文件上传到服务器
                adDto.getImgFile().transferTo(file);
                //将文件名到数据库中
                ad.setImgFileName(fileName);
                //调用Dao中的insert方法
                adDao.insert(ad);
                return true;
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return false;
    }

    @Override
    public boolean deleteAd(int id) {
        Ad ad = adDao.selectById(id);
        boolean delete = adDao.deleteAd(id);
        FileUtil.delete(adImageSavePath + ad.getImgFileName());
        if (delete==false) {
            return false;
        }
        return true;
    }

    @Override
    public AdDto selectById(int id) {
        AdDto result = new AdDto();
        Ad ad = adDao.selectById(id);
        BeanUtils.copyProperties(ad, result);
        return result;
    }

    @Override
    public boolean update(AdDto adDto) throws IOException {
        Ad ad = new Ad();
        BeanUtils.copyProperties(adDto, ad);
        String fileName = null;
        if (adDto.getImgFile() != null) {
            fileName = FileUtil.save(adDto.getImgFile(), adImageSavePath);
            ad.setImgFileName(fileName);
        }
        int updateCount = adDao.update(ad);
        if (updateCount != 1) {
            return false;
        }
        return true;
    }


}
